#pragma once

struct PackedVector
{
	union {
		struct {
			unsigned char X, Y, Z, W;
		};
		unsigned int Packed;
	};

	PackedVector() {}
	PackedVector(const Vector3& v) { Init(v.X, v.Y, v.Z, 0); }
	PackedVector(const Vector4& v) { Init(v.X, v.Y, v.Z, v.W); }
	PackedVector(const float* v) { Init(v[0], v[1], v[2], v[3]); }
	PackedVector(float x, float y, float z, float w) { Init(x, y, z, w); }

	inline void Init(float x, float y, float z, float w)
	{
		X = Clamp(Math::Trunc(x * 127.5f + 127.5f), 0, 255);
		Y = Clamp(Math::Trunc(y * 127.5f + 127.5f), 0, 255);
		Z = Clamp(Math::Trunc(z * 127.5f + 127.5f), 0, 255);
		W = Clamp(Math::Trunc(w * 127.5f + 127.5f), 0, 255);
	}
};